// 导入数据库连接对象的包
const db = require("../db")

// 导入bcryptjs
const bcrypt = require('bcryptjs')

// 用这个包来生成 JWT的Token 字符串 
const jwt = require('jsonwebtoken')

// 导入全局的配置文件
const config = require('../config.js')





// 注册新用户的处理函数
exports.regUser = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句查询用户名是否被占用
    const sql = 'select * from users where username=?'
    // 定义sql语句查询手机号是否已被注册
    const sql1 = 'select * from users where tel=?'
    // 定义sql语句插入数据
    const sql2 = 'insert into users set ?'
    // 调用query方法执行sql语句
    db.query(sql, userinfo.username, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        // 判断用户名是否被占用
        if (results.length > 0) {
            return res.send('用户名已被占用！')
        }

        db.query(sql1, userinfo.tel, (err, results) => {
            // 执行sql语句失败
            if (err) return res.send(err.message)
            // 判断手机号是否已被注册
            if (results.length > 0) {
                return res.send('手机号已被注册！')
            }
        })

        // 调用bcrypt.hashSync()对密码进行加密
        userinfo.password = bcrypt.hashSync(userinfo.password, 10)
        db.query(sql2, { username: userinfo.username, password: userinfo.password, tel: userinfo.tel, date: userinfo.date, sex: userinfo.sex, place: userinfo.place }, (err, results) => {
            // 判断sql语句是否执行成功
            if (err) return res.send(err.message)
            // 判断影响行数是否为1行
            if (results.affectedRows !== 1) return res.send('注册失败')
            // 注册成功
            res.send({
                status: 200,
                message: '注册成功！'
            })

        })


    })

}





// 管理员登录的处理函数
exports.login = (req, res) => {
    // 接收表单的数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'select * from administrator where username=?'
    // 执行sql语句根据用户名查询用户信息
    db.query(sql, userinfo.username, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)

        // 执行sql语句成功 但是获取到的数据条数不等于1 results返回的是一个数组
        if (results.length != 1) return res.send('登录失败！')
        // 判断密码是否正确
        if (userinfo.password != results[0].password) return res.send('密码错误 登录失败')

        // 登录成功生成 JWT的Token 字符串 
        // 通过 ES6 的高级语法 快速剔除密码的值 保证信息安全
        const user = { ...results[0], password: '' }
        // 对用户的信息进行加密生成token字符串
        const tokenStr = jwt.sign(user, config.jwtSecretKey, { expiresIn: '10h' })
        // 将生成的token字符串响应给客户端
        res.send({
            status: 200,
            message: 'administrator',
            token: 'Bearer ' + tokenStr
        })

    })
},





    // 用户登录的处理函数
    exports.login2 = (req, res) => {
        // 接收表单数据
    const userinfo = req.body
        // 定义sql语句
        const sql = 'select * from users where username=?'
        // 执行sql语句根据用户名查询用户信息
        db.query(sql, userinfo.username, (err, results) => {
            // 执行sql语句失败
            if (err) return res.send(err.message)
            // 执行sql语句成功 但是获取到的数据条数不等于1 results返回的是一个数组
            if (results.length != 1) return res.send('登录失败！')
            // 判断密码是否正确 调用bcrypt.compareSync方法解密数据库中存储的密码
            const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)
            if (!compareResult) return res.send('密码错误 登录失败')

            // 登录成功生成 JWT的Token 字符串 
            // 通过 ES6 的高级语法 快速剔除密码的值 保证信息安全
            const user = { ...results[0], password: '' }
            // 对用户的信息进行加密生成token字符串
            const tokenStr = jwt.sign(user, config.jwtSecretKey, { expiresIn: '10h' })
            // 将生成的token字符串和用户信息响应给客户端
            res.send({
                status: 200,
                message: results[0],
                token: 'Bearer ' + tokenStr
            })
        })
    }





// 修改用户信息处理函数
exports.update = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'update users set username=?,sex=?,tel=?,date=?,place=? where id=? '
    // 执行sql语句
    db.query(sql, [userinfo.username, userinfo.sex, userinfo.tel, userinfo.date, userinfo.place, userinfo.id], (err, results) => {
        // 执行sql语句失败返回错误信息
        if (err) return res.send(err.message)
        // 判断影响行数是否为1行
        if (results.affectedRows !== 1) return res.send('修改失败！')
        // 修改成功
        res.send({
            status: 200
        })

    })
}





// 添加商品的处理函数
exports.add = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句插入数据
    const sql2 = 'insert into shop set ?'
    // 执行sql语句
    db.query(sql2, { logo: userinfo.logo, model: userinfo.model, price: userinfo.price, imgurl: userinfo.imgurl, count: userinfo.count, state: userinfo.state }, (err, results) => {
        // 执行语句失败
        if (err) return res.send(err.message)
        // 判断影响行数是否为1行
        if (results.affectedRows !== 1) return res.send('添加失败！')
        // 添加成功
        res.send({
            status: 200,
            message: results[0]

        })
    })

}





// 请求商品数据的处理函数
exports.shop = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'select * from shop where logo=?'
    // 执行sql语句
    db.query(sql, userinfo.logo, (err, results) => {
        // 执行语句失败
        if (err) return res.send(err.message)
        // 执行成功
        res.send({
            status: 200,
            msg: results
        })
    })
}





// 购物车处理函数
exports.car = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'insert into car set ?'
    // 执行sql语句
    db.query(sql, { goods: userinfo.goods, username: userinfo.username, tel: userinfo.tel, place: userinfo.place }, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        if (results.affectedRows === 0) return res.send('添加失败')
        // 执行成功
        res.send({
            status: 200,
        })
    })
}






// 查询订单
exports.car3 = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'select * from car'
    // 执行sql语句
    db.query(sql, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        // 成功
        res.send({
            status: 200,
            message: results
        })
    })
}







// 发货
exports.car4 = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'delete from car where id=?'
    // 执行sql语句
    db.query(sql, userinfo.id, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        // 成功
        res.send({
            status: 200,
        })
    })
}







// 客户已构物信息
exports.car2 = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'insert into car2 set ?'
    // 执行sql语句
    db.query(sql, { username: userinfo.username, imgurl: userinfo.imgurl, price: userinfo.price, title: userinfo.title }, (err, results) => {
        // 执行语句失败
        if (err) return res.send(err.message)
        // 执行成功
    })
}





// 搜索商品功能
exports.search = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'select * from shop where model=?'
    // 执行sql语句
    db.query(sql, userinfo.model, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        // 执行成功
        return res.send({
            status: 200,
            message: results[0]
        })
    })

}







// 查询已购商品
exports.search2 = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'select * from car2 where username=?'
    // 执行sql语句
    db.query(sql, userinfo.username, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        // 执行成功
        res.send({
            status: 200,
            message: results
        })
    })
}







// 搜索商品功能
exports.search3 = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'select * from shop where logo=?'
    // 执行sql语句
    db.query(sql, userinfo.name, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        // 执行成功
        return res.send({
            status: 200,
            message: results
        })
    })

}





// 更改价格

exports.search4 = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'update shop set price=? where id=?'
    // 执行sql语句
    db.query(sql, [userinfo.price, userinfo.id], (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        // 执行成功
        return res.send({
            status: 200,

        })
    })

}

// 删除商品

exports.delete = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'delete from shop where id=?'
    // 执行sql语句
    db.query(sql, userinfo.id, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        // 执行成功
        return res.send({
            status: 200,

        })
    })

}




// 查询用户
exports.search5 = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
    // 定义sql语句
    const sql = 'select * from users'
    // 执行sql语句
    db.query(sql, userinfo.username, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        res.send({
            status: 200,
            message: results
        })
    })
}





// 删除用户
exports.delete2 = (req, res) => {
    // 接收表单数据
    const userinfo = req.body
  
    // 定义sql语句
    const sql = 'delete from users where id=?'
    // 执行sql语句
    db.query(sql, userinfo.id, (err, results) => {
        // 执行sql语句失败
        if (err) return res.send(err.message)
        // 执行成功
        return res.send({
            status: 200,

        })
    })
}